package edu.northwestern.cbits.purple_robot_manager.probes.builtin; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import edu.northwestern.cbits.purple_robot_manager.R; import edu.northwestern.cbits.purple_robot_manager.logging.LogManager; import edu.northwestern.cbits.purple_robot_manager.probes.Probe; public class ScreenProbe extends Probe { public static final String NAME = "edu.northwestern.cbits.purple_robot_manager.probes.builtin.ScreenProbe"; public static final String SCREEN_ACTIVE = "SCREEN_ACTIVE"; private static final boolean DEFAULT_ENABLED = true; private static final String ENABLED = "config_probe_screen_enabled"; private boolean _isInited = false; private boolean _isEnabled = false; private BroadcastReceiver _receiver = null; @Override public String getPreferenceKey() { return "built_in_screen"; } @Override public String name(Context context) { return ScreenProbe.NAME; } @Override public String title(Context context) { return context.getString(R.string.title_screen_probe); } @Override public String probeCategory(Context context) { return context.getResources().getString(R.string.probe_device_info_category); } @Override public boolean isEnabled(Context context) { if (!this._isInited) { IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); final ScreenProbe me = this; this._receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (me._isEnabled) { Bundle bundle = new Bundle(); bundle.putString("PROBE", me.name(context)); bundle.putLong("TIMESTAMP", System.currentTimeMillis() / 1000); final String action = intent.getAction(); if (Intent.ACTION_SCREEN_OFF.equals(action)) bundle.putBoolean(ScreenProbe.SCREEN_ACTIVE, false); else if (Intent.ACTION_SCREEN_ON.equals(action)) bundle.putBoolean(ScreenProbe.SCREEN_ACTIVE, true); me.transmitData(context, bundle); } } }; context.registerReceiver(this._receiver, filter); this._isInited = true; } SharedPreferences prefs = Probe.getPreferences(context); if (super.isEnabled(context)) { if (prefs.getBoolean("config_probe_screen_enabled", ScreenProbe.DEFAULT_ENABLED)) this._isEnabled = true; else this._isEnabled = false; } else this._isEnabled = false; return this._isEnabled; } @Override public void enable(Context context) { SharedPreferences prefs = Probe.getPreferences(context); Editor e = prefs.edit(); e.putBoolean(ScreenProbe.ENABLED, true); e.commit(); } @Override public void disable(Context context) { SharedPreferences prefs = Probe.getPreferences(context); Editor e = prefs.edit(); e.putBoolean(ScreenProbe.ENABLED, false); e.commit(); } @Override public String summarizeValue(Context context, Bundle bundle) { boolean active = bundle.getBoolean(ScreenProbe.SCREEN_ACTIVE, false); if (active) return context.getResources().getString(R.string.summary_screen_probe_active); return context.getResources().getString(R.string.summary_screen_probe_inactive); } @Override public Bundle formattedBundle(Context context, Bundle bundle) { Bundle formatted = super.formattedBundle(context, bundle); boolean active = bundle.getBoolean(ScreenProbe.SCREEN_ACTIVE, false); if (active) formatted.putString(context.getString(R.string.display_screen_label), context.getString(R.string.display_screen_active_label)); else formatted.putString(context.getString(R.string.display_screen_label), context.getString(R.string.display_screen_inactive_label)); return formatted; } @Override public String summary(Context context) { return context.getString(R.string.summary_screen_probe_desc); } @Override @SuppressWarnings("deprecation") public PreferenceScreen preferenceScreen(Context context, PreferenceManager manager) { PreferenceScreen screen = super.preferenceScreen(context, manager); screen.setTitle(this.title(context)); screen.setSummary(R.string.summary_screen_probe_desc); CheckBoxPreference enabled = new CheckBoxPreference(context); enabled.setTitle(R.string.title_enable_probe); enabled.setKey(ScreenProbe.ENABLED); enabled.setDefaultValue(ScreenProbe.DEFAULT_ENABLED); screen.addPreference(enabled); return screen; } public String assetPath(Context context) { return "screen-probe.html"; } }